//
//  ViewController.m
//  UI11_UITableView综合练习
//
//  Created by Marry W. on 15/12/21.
//  Copyright © 2015年 www.lanou3g.com 蓝鸥科技. All rights reserved.
//

#import "ViewController.h"
#import "MyTableViewCell.h"
#import "NSString+Characters.h"

@interface ViewController () <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, retain) UITableView *tableView;
@property (nonatomic, retain) NSMutableArray *dataArr;

@property (nonatomic, retain) NSMutableDictionary *contactDic;// 联系人字典
@property (nonatomic, retain) NSArray *keyArr;// 分区名数组
@end

@implementation ViewController

- (void)dealloc
{
    [_tableView release];
    [_dataArr release];
    [super dealloc];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor whiteColor];
    
    // tableView
    // 通过属性创建对象时 一定要用self.xx=(setter方法, 防止提前被释放)
    self.tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStyleGrouped];
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    [self.view addSubview:self.tableView];
    // 平衡alloc的引用计数时 一定要用[_xx release];
    [_tableView release];
    
    // 数据处理
    [self dataHandler];
}
/// 数据处理
- (void)dataHandler
{
    // 获取plist
    NSString *path = [[NSBundle mainBundle] pathForResource:@"ContactList" ofType:@"plist"];
    NSArray *arr = [NSArray arrayWithContentsOfFile:path];
//    self.dataArr = [arr mutableCopy];
    // 数组->字典+数组
    self.contactDic = [NSMutableDictionary dictionary];
    // 遍历数据源
    for (NSDictionary *dic in arr) {
        // 首字母
        NSString *capLetter = [dic[@"name"] firstCharacterOfName];
        NSMutableArray *tempArr = _contactDic[capLetter];
        if (tempArr) {
            // 如果存在
            [tempArr addObject:dic];
        } else {
            // 不存在 创建后添加
            tempArr = [NSMutableArray array];
            [tempArr addObject:dic];
            [_contactDic setObject:tempArr forKey:capLetter];
        }
    }
    // 保存所有key (排序后)
    self.keyArr = [_contactDic.allKeys sortedArrayUsingSelector:@selector(compare:)];
}

#pragma mark - tableView协议方法
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // 分组数
    return _contactDic.count;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    // 分区头
    return _keyArr[section];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
#warning 使用数组赋值cell时 如果number设置为固定值 一般会崩溃数组越界
    // 分区中行数
    NSString *key = _keyArr[section];
    NSArray *arr = _contactDic[key];
    return arr.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if (!cell) {
        cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"] autorelease];
    }
    // 赋值
//    NSDictionary *dic = _dataArr[indexPath.row];
//    cell.textLabel.text = dic[@"name"];
//    cell.detailTextLabel.text = dic[@"phone"];
    // 联系人信息获取
    NSString *key = _keyArr[indexPath.section];
    NSArray *arr = _contactDic[key];
    NSDictionary *dic = arr[indexPath.row];
    // 自定义cell赋值
#warning 如果cell上的内容 出现重叠 1.使用属性赋值时 误使用系统属性 2.控件属性的frame设置发生遮盖
    cell.nameLabel.text = dic[@"name"];
    cell.phoneLabel.text = dic[@"phone"];
    cell.hobbyLabel.text = dic[@"hobby"];
    return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 200;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
